[PHP5] Meta-tags ophalen met DomDocument
6 mei 2011Er is een prima manier om meta-tags op te halen van een website: get_meta_tags(). Als dat alles is waar je naar op zoek bent, hoef je niet meer verder te kijken. In combinatie met data-mining of een spider is deze functie echter tergend traag en inefficiënt.
De functie die ik hierboven heb genoemd, haalt de hele website opnieuw op en gaat vervolgens de meta-tags opzoeken. Hoewel ik er vrijwel zeker van ben dat de verwerkingstijd van get_meta_tags() lager ligt dan iedere andere methode in PHP (i.v.m. de native C libraries die hierbij gebruik worden), had ik een compromis nodig.
In een spider haal je een website op en verwerk je deze met bijvoorbeeld een Document Object Model oftewel een DOM. Om dan vervolgens dezelfde website opnieuw op te halen om de meta-tags te laden is natuurlijk onzin.
Regular expressions voor meta-tags
Natuurlijk hadden we dit probleem ook met regular expressions (regex) op kunnen lossen, maar daar waren we in dit geval niet veel mee opgeschoten. Bij het gebruik van regular expressions vertrouw je wel heel erg op de tekstbewerkingsfuncties van PHP. En dat levert in veel gevallen een zeer trage verwerking op. Het kan op een betere manier, dus ik ga het niet eens voordoen!
DomDocument gebruiken voor meta-tags
Stel je voor dat we de meta-description willen hebben. In dat geval is de makkelijkste manier uiteraard om de pagina eerst in te laden in een document object model en vervolgens de description op te halen. Een functie om een description op te halen ziet er bijvoorbeeld als volgt uit:
function getDescription($html)
{
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$contents = $xpath->query('/html/head/meta[@name="description"]/@content');
// If nothing was found..
if ($contents->length == 0) {
return false;
// Found one or more descriptions, just give me the first
} else {
foreach ($contents as $content) {
return $content->value . PHP_EOL;
}
}
}
De $html variabele die meegegeven wordt bevat letterlijk de HTML van de pagina. De pagina kun je bijvoorbeeld ophalen met file_get_contents().
Natuurlijk is dit puur en alleen een demonstratievoorbeeld. Het maken van een aparte functie voor iedere meta-tag of ieder element zou onlogisch en inefficiënt zijn, behalve als $dom en $xpath per functie apart doorgegeven zouden worden. Een leuk aspect aan de bovenstaande code is overigens, dat je bij de foreach ook een array kunt vormen.
Dit is eigenlijk de eenvoudigste manier om meta-tags uit een website te extraheren. Speel er maar eens wat mee, het is simpeler dan je denkt! ;-)
Internet Marketing
Een zoekmachine bouwen #8 - PageRank, Zoeken, etc.Geplaatst op 5 december 2019
Een zoekmachine bouwen #7 - Backlinks & Tabellen
Geplaatst op 22 juli 2018
Een zoekmachine bouwen #6 - Full page cache
Geplaatst op 13 juli 2018
Een zoekmachine bouwen #5 - Een stap verder
Geplaatst op 11 juli 2018
Auteur: Edwin Dijk
TimeTick producten
Urenregistratie software
Gratis urenregistratie software